package com.sywl.web.component;

import java.util.List;

/**
 * 分页接口<br/>
 * 通过该接口可以方便的获取到关于分页的各种信息<br/>
 * 比如当前页码、上一页页码、下一页页码<br/>
 * 可以减轻分页的工作量<br/>
 * @author 林超
 * @see SimplePage
 */
public interface Page {
	/**
	 * @return 当前页码
	 */
	int getPage();
	
	/**
	 * @return 上一页，如果没有上一页，则返回1
	 */
	int getPrev();
	
	/**
	 * @return 下一页，如果没有下一页，则返回1
	 */
	int getNext();
	
	/**
	 * @return 总记录数
	 */
	int getCount();
	
	/**
	 * @return 第一页，
	 */
	int getFirst();
	
	/**
	 * @return 最后一页
	 */
	int getLast();
	
	/**
	 * @return 单页最大记录数
	 */
	int getMaxResult();
	
	/**
	 * 验证当前页 是否有效<br/>
	 * 当总页数为5，那么当前页在1 - 5 之间都是有效的，否则均为无效<br/>
	 * @return 有效true，无效返回false 
	 */
	boolean isValid();
	
	/**
	 * @return 总页数
	 */
	int getPageCount();
	
	/**
	 * 设置当前页在页面列表中的偏移位置
	 * 比如：
	 * <pre>
	 *   当前偏移位置为3，当前页为7，一共20页，假如只显示7页
	 *   那么得到的pages应该是：5、6、7、8、9、10、11
	 *   始终保证当前页在列表中的位置小于等于该偏移量
	 *   如果上诉的偏移量为4，那么得到的页码列表应该是：4、5、6、7、8、9、10
	 * </pre>  
	 * @param 偏移位置
	 */
	void setPosition(int position);
	
	/**
	 * @return 当前页在页面列表中的偏移位置
	 */
	int getPosition();
	/**
	 * 有时候我们需要显示一个页码列表<br/>
	 * 此列表包含了当前页跟上下几页<br/>
	 * @return 页码集合
	 */
	List<Integer> getPages();
}
